
/*
 *
 *
 */


#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h>
#import "alivcVideoChatParam.h"
#import "alivcPublisherPerformanceInfo.h"
#import "alivcPlayerPerformanceInfo.h"


/**
 */
@interface AlivcVideoChatHost : NSObject

/**
 功能：准备推流，建立预览画面
 返回值：0：正常；非0：错误
 参数：
    view：推流预览窗口
    width，height：推流宽度和高度，目前支持360x640、480x848（横屏推流的时候为640x360、848x480）
    height：推流高度
    publisherParam：推流配置：
        ALIVC_PUBLISHER_PARAM_UPLOADTIMEOUT： 推流上传超时时间，单位ms,默认15000。
        ALIVC_PUBLISHER_PARAM_CAMERAPOSITION： 选择前后摄像头，枚举成员： cameraPositionFront = 0, cameraPositionBack = 1。默认前置。
        ALIVC_PUBLISHER_PARAM_LANDSCAPE：推流横屏/竖屏，NO为竖屏，YES为竖竖。默认竖屏。
        ALIVC_PUBLISHER_PARAM_MAXBITRATE：推流最大码率，单位Kbps。默认1500。
        ALIVC_PUBLISHER_PARAM_MINBITRATE：推流最小码率，单位Kbps。默认200。
        ALIVC_PUBLISHER_PARAM_ORIGINALBITRATE： 推流初始码率，单位Kbps。默认500。
        ALIVC_PUBLISHER_PARAM_AUDIOSAMPLERATE： 推流音频采样率，单位Hz。固定32000，暂不可调。
        ALIVC_PUBLISHER_PARAM_AUDIOBITRATE： 推流音频码率，单位Kbps。固定96，暂不可调。
        ALIVC_PUBLISHER_PARAM_FRONTCAMERAMIRROR： 前置摄像头是否镜像。
 */
- (int) prepareToPublish:(UIView*)view width:(int)width height:(int)height publisherParam:(NSDictionary*)publisherParam;

/**
 功能：准备推流
 返回值：0：正常；非0：错误
 参数：
    url：推流地址
 */
- (int) startToPublish: (NSString*)url;

/**
 功能：停止推流
 返回值：0：正常；非0：错误
 参数：无
 */
- (int) stopPublishing;

/**
 功能：停止预览
 返回值：0：正常；非0：错误
 参数：无
 */
- (int) finishPublishing;

/**
 功能：设置连麦时候播放参数
 返回值：无
 参数：
    playerParam：配置参数
        ALIVC_PLAYER_PARAM_DOWNLOADTIMEOUT： 连麦播放缓冲超时时间，单位ms。默认15000。
        ALIVC_PLAYER_PARAM_DROPBUFFERDURATION： 连麦播放开始丢帧阈值，单位ms。默认1000。
        ALIVC_PLAYER_PARAM_SCALINGMODE： 连麦播放显示模式，目前支持2种。枚举成员scalingModeAspectFit = 0，代表等比例缩放，若显示窗口宽高比与视频不同则会有黑边；scalingModeAspectFitWithCropping = 1，代表带切边的等比例缩放，若显示窗口宽高比与视频不同，则自动对视频裁边以撑满显示窗口。 默认值为1。
 */
-(void) setPlayerParam:(NSDictionary*)playerParam;

/**
 功能：动态设置推流配置参数
 返回值：无
 参数：
    publisherParam：配置参数
        ALIVC_PUBLISHER_PARAM_MAXBITRATE：推流最大码率，单位Kbps。
        ALIVC_PUBLISHER_PARAM_MINBITRATE：推流最小码率，单位Kbps。
 */
-(void) setPublisherParam:(NSDictionary*)publisherParam;

/**
 功能：开始连麦
 返回值：0：正常；非0：错误
 参数：
    url：播放url
    view：播放窗口
 */
- (int) launchChat:(NSURL*)url view:(UIView*)view;

/**
 功能：开始多人连麦
 返回值：0：正常；非0：错误
 参数：
 urls：播放url数组，NSURL类型
 views：播放窗口数组，UIView类型
 */
-(int) launchChats:(NSArray *)urls views:(NSArray *)views;

/**
 功能：多人加入连麦
 返回值：0：正常；非0：错误
 参数：
 urls：播放url数组，NSURL类型
 views：播放窗口数组，UIView类型
 */
-(int) addChats:(NSArray *)urls views:(NSArray *)views;

/**
 功能：移除多人连麦
 返回值：0：正常；非0：错误
 参数：
 urls：播放url数组，NSURL类型
 */
-(int) removeChats:(NSArray *)urls;

/**
 功能：当连麦时，某个连麦者的视频播放超时，调用reconnectChat进行重新打开。
 返回值：0：正常；非0：错误
 参数：
 url：播放超时的视频的url
 */
-(int) reconnectChat:(NSURL *)url;

/**
 功能：结束连麦
 返回值：0：正常；非0：错误
 参数：无
 */
- (int) abortChat;

/**
 * 功能：后台暂停，没有视频有音频
 */
-(void) pause;

/**
 * 功能：恢复到前台
 */
-(void)resume;

/**
 * 功能：在推流过程中切换前后摄像头。
 * 返回值：是否成功。
 * 备注：无。
 */
- (int) switchCamera;

/**
 * 功能：缩放摄像头
 * 参数：
    zoom：放大倍率。最小值为1.0，表示不放大；最大值maxZoom与设备本身相关，且上限设置为3.0，即maxZoom = min（maxZoom，3.0）
 * 备注：该函数仅对后置摄像头有效。
 */
- (int) zoomCamera:(CGFloat)zoom;

/**
 * 功能：聚焦到某个设置的点。调用该函数可以聚焦到预览窗口上人为指定的某个点。
   参数：
        point：需要聚焦到的点的位置。（0.0，0.0）代表左上角，（1.0，1.0）代表右下角，（0.5，0.5）代表中心点。
        autofocus：自动聚焦模式。0代表只自动聚焦一次，以后将按照固定的景深来进行聚焦；1代表持续自动聚焦，当拍摄的物体变换时仍然会自动调整景深来聚焦。
 */
- (int) focusCameraAtAdjustedPoint:(CGPoint)point autoFocus:(BOOL)autoFocus;

/**
 * 功能：设置滤镜参数，目前只有一个美颜的滤镜。
 * 参数：
    ALIVC_FILTER_PARAM_BEAUTY_ON：美颜是否开启
    ALIVC_FILTER_PARAM_BEAUTY_WHITEN：美白程度[0,100]
    ALIVC_FILTER_PARAM_BEAUTY_BUFFING：磨皮程度[0,35]
 */
-(void) setFilterParam:(NSDictionary*)param;

/**
 * 功能：获取SDK版本号。
 * 返回值：返回NSString类型的版本号。
 * 备注：当开发者反馈问题时，请使用该方法获得SDK版本号并随同问题一起反馈。
 */
- (NSString *) getSDKVersion;

/**
 * 功能：获取推流的性能参数值，参考AlivcPublisherPerformanceInfo
 */
-(AlivcPublisherPerformanceInfo*) getPublisherPerformanceInfo;

/**
 * 功能：获取播放的性能参数值，参考AlivcPlayerPerformanceInfo
 * 参数：url：指定播放器的性能参数
 */
-(AlivcPlayerPerformanceInfo*) getPlayerPerformanceInfo:(NSURL*)url;

/**
 * 功能：是否静音
 */
@property(nonatomic, readwrite)  BOOL publisherMuteMode;

@end
